/*
 * @Author: Sonui
 * @Date: 2022-02-23 05:13:35
 * @LastEditors: Sonui
 * @LastEditTime: 2022-02-23 06:32:41
 * @FilePath: \AI_SCHEDULE\Parser.js
 * @Description: 对教务处接口数据转为小爱课程表数据
 * email: me@sonui.cn
 * Copyright (c) 2022 by Sonui, All Rights Reserved. 
 */

/**
 * @description: 将"1-4,6-7,9-11周单周,12-13,15-17周"的形式转为数组形式，包含单双周处理
 * @param {*} str 欲转换周实践区间
 * @return {*} 转换后的周数组
 */
 function getWeeks(str) {
    console.log(str)
    let regex = /(\d*-*\d+)\S{0,1}(\S周)*/gm;
    let result = [];
    let res = Array.from(regex[Symbol.matchAll](str))
    for (let i = 0; i < res.length; i++) {
        if ((/^\d+$/.test(res[i][1]))) return [res[i][1]];//处理一下特殊情况，例如 第6周
        let begin = res[i][1].split('-')[0];
        let end = res[i][1].split('-')[1];
        for (let n = Number(begin); n < Number(end) + 1; n++) {
            if (res[i][2] && n % 2 == (res[i][2] == '双周' ? 1 : 0)) continue; //有单双周限制
            result.push(n);
        }
    }
    return result;
}

/**
 * @description: 转换节次
 * @param {*} start
 * @param {*} end
 * @return {*}
 */
function getSections(start, end){
    let ret = [];
    for (let i = start; i <= end; i++)
        ret.push(i);
    return ret;
}
/**
 * @description: 
 * @param {*} html
 * @return {*}
 */
function scheduleHtmlParser(html) {
    let info = JSON.parse(html),
        ret = [{
            name: "数学", // 课程名称
            position: "教学楼1", // 上课地点
            teacher: "张三", // 教师名称
            weeks: [1, 2, 3, 4], // 周数
            day: 3, // 星期
            sections: [1, 2, 3], // 节次
        }];
    info = info[0];
    for (let i = 0; i < info.length; i++){
        ret[i] = {
            name: info[i].kcm,
            position: info[i].jasm, // 上课地点
            teacher: info[i].jsm, // 教师名称
            weeks: getWeeks(info[i].zcsm), // 周数
            day: info[i].id.skxq, // 星期
            sections: getSections(info[i].id.skjc, info[i].id.skjc + info[i].cxjc - 1), // 节次
        };
    }
    return ret
}